package collection;

public class LiLun {
        /*
    集合（Collection）
        集合是一种可以存放多个数据的容器
            数组也可以存放多个数据，相比数组，集合对其中的元素的管理更加便捷，解决了数据难以维护（例如增、删）的问题
        集合的具体种类有许多种，特性各不相同，在开发实践中。可以根据实际需求选择适合的集合
        Collection接口
            Collection是一个接口，定义了集合相关的操作方法
            常见子接口：
                List:可重复切有序集
                Set:不可重复集
                元素是否重复，取决于元素的equals()比较的结果
     */


    /*
    ArrayList和LinkedList
        List接口是Collection接口的子接口，用于定义线性表数据结构。可以将List理解为存放对象的数组，
        只不过其元素个数可以动态的增加或减少。
        List接口的两个常见实现类为ArrayList和LinkedList，分别用动态数组和链表的方式实现了List接口。
        可以认为ArrayList和LinkedList的方法在逻辑上完全一样，只是在性能上有一定的差别，ArrayList更适合于
        随机访问而LinkedList更适合于插入和删除。在性能要求不是特别苟刻的情形下可以忽略这个差别。
     */

    /*
    集合排序
        Collections.sort()方法实现排序
            Collections是集合的工具类，它是提供了很多便于我们操作集合的方法，其中就有用于集合排序的sort方法。
            该方法定义为：
                static void sort(List<T> list)
                该方法的作用是对给定的集合元素进行自然排序（升序）。
                该方法要求集合元素必须实现Comparable接口，否则编译不通过。
        为什么要用Comparator
            一旦Java类实现了Comparable接口，其比较逻辑就已经确定；
            如果希望在排序的操作中临时指定比较规则，可以采用Comparator接口回调的方式。
        Collections接口
            Collections重载的sort方法
            该方法定义为：
                void sort(List<T> list, Comparator<? super T> c)
                对给定的集合元素进行自然排序，活该方法不要求元素实现Comparable接口，
                在排序过程中依靠给定的Comparator来确定元素大小的关系。
            Comparator接口要求实现类必须重写其定义的方法：
                int compare(T o1, T o2);
                该方法用来定义比较参数o1与o2大小的规则。
                该方法的返回值表达o1与o2的大小关系，要求：
                    若o1>o2，则返回值应>0;
                    若o1<o2，则返回值应<0;
                    若o1==o2，则返回值应0;
     */

    /*
    排序自定义元素
        static void sort(List<T> list)
        方法要求集合元素必须实现Comparable接口。

        对于自定义类型元素，不推荐实现Comparable接口，因为这样的操作对于我们的程序具有侵入性。
        侵入性：
            当我们的代码需要引入一个组件，导致其它代码要做相应的改动调整来适应这个组件，这种情况我们就称组件具有侵入性
     */



    /*
    核心API对象
        一个Collection接口 (定义了一组操作数据的规范)
        三个Collection子接口：List、Set、Queue接口(没学)
        三个实现类ArrayList、LinkedList、HashSet
        一个Iterator接口(迭代器)
        集合与数组之间的转换
        几个快捷键(Ctrl+n[查找类],Ctrl+h[查看继承体系],Ctrl+f12[看类中方法])

     */

    /*
    ArrayList 对象特点
        底层数据存储是数组
        数据允许重复，默认可以保证元素添加顺序
        随机读取数据的效率比较高，但是插入和删除效率相对较低
     */

    /*
    LinkedList 对象特点
        底层数据存储是双向链表
        数据允许重复，默认可以保证元素添加顺序
        随机读取数据的效率比较低。但是头部和尾部插入和删除效率比较高
     */

    /*
    HashSet 对象特点
        底层数据存储是哈希表/散列表（暂时还没江，可以简单将其理解为数组+链表）
        不允许元素重复，并且不能保证元素添加顺序
     */

    /*
    集合中元素的排序

     */
}









